package com.shujia.day02;

public class Code09WeiYunSuan {
    public static void main(String[] args) {
        int a = 3;
        int b = 2;
        System.out.println(a & b); //与运算
        System.out.println(a | b); //或运算
        System.out.println(a ^ b); // 异或运算
        System.out.println(~ b);

        /*
            位运算，实际上就是对底层的补码进行做逻辑计算

            3 的补码 00000000 00000000 00000000 00000011
            2 的补码 00000000 00000000 00000000 00000010
            与运算: 对应位置，如果都是1那么返回1 其他返回0 (1可以看成true 0看成false做对应位置的逻辑运算)
            a & b  =>  00000000 00000000 00000000 00000010 => 正数 所以原码和补码都是一样的 得到数值为 2
            或运算: 对应位置，如果出现1那么返回1 其他返回0 (1可以看成true 0看成false做对应位置的逻辑运算)
            a | b  =>  00000000 00000000 00000000 00000011 => 正数 所以原码和补码都是一样的 得到数值为 3
            异或运算：对应位置，如果数值相同那么返回0 不同则返回1
            a ^ b  => 00000000 00000000 00000000 00000001 => 正数 所以原码和补码都是一样的 得到数值为 1
            反码： 对应位置取反
            ~ b =>  1 1111111 11111111 11111111 11111101  (补码)
                =>  1 1111111 11111111 11111111 11111100  (反码)
                =>  1 0000000 00000000 00000000 00000011  (原码)
                => 得到数值: -3
         */

    }
}
